In 2013, the U.S. National Highway Transportation Safety Administration proposed a new rule requiring a rear-view video camera system for new cars. The new regulation stipulated that passenger vehicle cockpit displays should show detect hazards behind a vehicle and be capable of producing video composited with warnings within 2 seconds of a driver placing the shifter into reverse. Achieving this goal was quite a challenge for a Linux system starting from a powered-off state! Carmakers who planned to ship Linux responded with an all-out effort to understand the boot process and reduce the time-to-video. Those engineers who participated learned a great deal about how Linux starts.
What does actually happen when the power button is pushed on a Linux device? What are initrd's, BIOSes and bootloaders, and why do we need them? There has been much controversy about PID 1 and SecureBoot, but much less discussion about the work the kernel performs before reaching userspace: probing devices, allocating memory and starting per-core housekeeping threads. The kernel actually does have a main.c, but what's in it? How does initialization of the kernel compare to that of normal Linux processes, and how do normal processes actually start anyway? Kernel actions are sequenced via a series of 'initcall' stages. Why do devices show multiple different boot animations and screen resolutions? How are 'suspend' and 'hibernate' different?
The talk will lightly touch on topics like initialization of hardware, how resume after hibernation differs from a fresh boot, what 'warm boot' and 'cold boot' are, and x86_64 versus ARM initialization. As time permits, the talk will include simple demos of how to examine your kernel with GDB, how to survive the rescue shell, how to build your own initrd and why you might want to do so, and a few ways to pass information between the kernel and the bootloader.
The technical level will be appropriate for system administrators and developers who have some familiarity with installing Linux systems or recovering them when they are stuck. The talk will include brief anecdotes from experiences during vehicular Linux development.
This talk was given at Linux.conf.au 2018 (LCA2018) which was held on 22-26 January 2018 in Sydney Australia.
linux.conf.au is a conference about the Linux operating system, and all aspects of the thriving ecosystem of Free and Open Source Software that has grown up around it. Run since 1999, in a different Australian or New Zealand city each year, by a team of local volunteers, LCA invites more than 500 people to learn from the people who shape the future of Open Source. For more information on the conference see https://linux.conf.au/